package org.jeecg.modules.zhoupackage.GoodsOrder.comtroller;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.zhouAdmin.admin.goodsCenter.pojo.MlccThirdGoods;
import org.jeecg.modules.zhouAdmin.admin.goodsCenter.pojo.MlccThirdGoodsSeries;
import org.jeecg.modules.zhoupackage.GoodsOrder.pojo.MlccThirdGoodsCart;
import org.jeecg.modules.zhoupackage.GoodsOrder.pojo.MlccThirdGoodsOrder;
import org.jeecg.modules.zhoupackage.GoodsOrder.service.IGoodsOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 现货下单Controller
 */
@RestController
@RequestMapping("/buygoods")
public class GoodsOrderController {

    @Autowired
    IGoodsOrderService service;


    /**
     * 获取商品系列
     *
     * @param token 令牌
     */
    @RequestMapping("/getGoodsSeries")
    public JSONObject getGoodsSeries(String token) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccThirdGoodsSeries> series = service.getGoodsSeries(token);
            jsonObject.put("code", 0);
            jsonObject.put("data", series);
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", e.getMessage());
            return jsonObject;
        }
    }

    /**
     * 根据选中的商品类型获取名下的商品系列
     *
     * @param token 令牌
     * @param type  商品类型id
     */
    @RequestMapping("/getGoodsSeriesByGoodsType")
    public JSONObject getGoodsSeriesByGoodsType(String token, String type) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccThirdGoodsSeries> series = service.getGoodsSeriesByGoodsType(token, type);
            jsonObject.put("code", 0);
            jsonObject.put("data", series);
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", e.getMessage());
            return jsonObject;
        }
    }

    /**
     * 查询商品列表
     *
     * @param token      令牌
     * @param goodsGroup 商品系列id
     * @param goodsCode  商品编号
     * @param goodsType  商品类型
     * @param pageNo     当前页
     * @param pageSize   页面大小
     */
    @RequestMapping("/getGoods")
    public JSONObject getGoods(String token, String goodsGroup, String goodsCode, String goodsType,
                               @RequestParam(name = "pageNo", defaultValue = "1") int pageNo,
                               @RequestParam(name = "pageSize", defaultValue = "30") int pageSize) {
        Page<MlccThirdGoods> page = new Page<>(pageNo, pageSize);
        JSONObject jsonObject = new JSONObject();
        try {
            IPage<MlccThirdGoods> result = service.getGoods(token, goodsGroup, goodsCode, goodsType, page);
            jsonObject.put("code", 0);
            jsonObject.put("data", result);
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", e.getMessage());
            return jsonObject;
        }
    }

    /**
     * 获取购物车列表
     *
     * @param token 令牌
     */
    @RequestMapping("/getCartList")
    public JSONObject getCartList(String token) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccThirdGoodsCart> result = service.getCartList(token);
            jsonObject.put("code", 0);
            jsonObject.put("data", result);
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
            return jsonObject;
        }
    }

    /**
     * 删除购物车
     *
     * @param token 令牌
     * @param id    购物车id
     */
    @RequestMapping("/deleteCart")
    public JSONObject deleteCart(String token, String id) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.removeCart(token, id);
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "删除成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "删除失败");
            }
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "删除失败");
            return jsonObject;
        }
    }

    /**
     * 创建未支付的现货订单
     *
     * @param token 令牌
     * @param order 订单类
     */
    @RequestMapping("/createFabricOrder")
    public JSONObject createFabricOrder(String token, MlccThirdGoodsOrder order) {
        JSONObject jsonObject = new JSONObject();
        try {
            String result = service.createFabricOrder(token, order);
            if ("-1".equals(result)) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token无效");
            } else if ("0".equals(result)) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "创建订单失败");
            } else if ("-6".equals(result)) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "购物车已被清空");
            } else {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "创建订单成功");
                jsonObject.put("data", result);
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "创建订单失败");
        }
        return jsonObject;
    }

    /**
     * 购物车更新备注
     *
     * @param id     购物车id
     * @param remark 备注
     */
    @RequestMapping("/updateRemark")
    public JSONObject updateRemark(String id, String remark) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.updateRemark(id, remark);
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "修改成功");
            } else if (result == -1) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "修改失败，数量最小为1");
            } else if (result == -5) {
                jsonObject.put("code", 2);
                jsonObject.put("msg", "没有操作");
            }
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 3);
            jsonObject.put("msg", "修改失败");
        }
        return jsonObject;
    }

    /**
     * 改变购物车购买数量的方法
     *
     * @param id      小购物车id
     * @param smallid 小购物车id
     * @param num     购买数量
     */
    @RequestMapping("/updateByNum")
    public JSONObject updateByNum(String token, String id, String smallid, String num) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.updateByNum(token, id, smallid, num);
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "修改成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "操作失败");
            }
            return jsonObject;
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "修改失败");
        }
        return jsonObject;
    }
}
